home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung 2 / Power-Programmierung CD 2 (Tewi)(1994).iso / c / library / dos / diverses / cexpress / keyboard / keypause.asm < prev    next >
Encoding:
Assembly Source File  |  1989-05-03  |  1.5 KB  |  57 lines

  1. ;void  key_pause(code,ascii,delay_1,delay_2);
  2. ;  unsigned char  code,ascii,delay_1,delay_2;
  3.  
  4.     EXTRN  _memory_model:byte
  5.  
  6. _TEXT    SEGMENT BYTE PUBLIC 'CODE'
  7.     ASSUME CS:_TEXT
  8.     PUBLIC _key_pause
  9. _key_pause proc near
  10.     sti            ;enable interrupts
  11.     push bp            ;
  12.     mov  bp,sp        ;set up stack frame
  13.     push di            ;
  14.     push si            ;
  15.     cmp  _memory_model,0    ;near or far?
  16.     jle  begin        ;jump if near
  17.     inc  bp            ;else add 2 to BP
  18.     inc  bp            ;
  19. begin:    mov  bh,[bp+4]        ;code to BH
  20.     mov  bl,[bp+6]        ;extended code flag to BL
  21.     sub  ax,ax        ;get Delay1
  22.     mov  al,[bp+8]        ;
  23.     mov  si,ax        ;first char delay
  24. L1:    mov  ah,0        ;function to read timer
  25.     int  1AH        ;time to CX:DX
  26.     add  dx,si        ;add delay to low word
  27.     mov  di,dx        ;copy to DI
  28. L2:    int  1AH        ;keep reading time...
  29.     cmp  dx,di        ;delay complete?
  30.     jne  L2            ;jump if not
  31.     mov  ah,1        ;BIOS func to chk buffer
  32.     int  16h        ;check for character
  33.     jz   L5            ;quit if buffer empty
  34.     cmp  al,bl        ;see if extended code
  35.     jne  L3            ;jump if not extended
  36.     mov  al,ah        ;else shift code to AL
  37. L3:    cmp  al,bh        ;is it the right code?
  38.     jne  L5            ;quit routine if not
  39. L4:    mov  ah,6        ;now clear buffer
  40.     mov  dl,0FFH        ;DOS func to read char
  41.     int  21h        ;read char w.o. waiting
  42.     jnz  L4            ;read again if char found
  43.     sub  ax,ax        ;fetch Delay2
  44.     mov  al,[bp+10]        ;
  45.     mov  si,ax        ;typematic delay
  46.     jmp  short L1        ;go check buffer again
  47. L5:    pop  si            ;
  48.     pop  di            ;
  49.     pop  bp            ;
  50.     cmp  _memory_model,0    ;quit
  51.     jle  quit        ;
  52.     db   0CBh        ;RET far
  53. quit:    ret            ;RET near
  54. _key_pause ENDP
  55. _TEXT    ENDS
  56.     END
  57.